サンプリング法

下のコードは、10条250株のイネが植栽されている一筆の田んぼで、ニカメイガ幼虫を20株調査するケースを想定している。単純無作為抽出法では、250株からランダムに20株選ぶ。層別抽出法では各条ごと25株の中から2回ランダム抽出する。

条数、条内株数を様々に変えて以下のコードを実行すれば、単純無作為抽出法と層別抽出法によるサンプリング場所を決定できる。ただし、サンプル数\(N\)は全ての株数を超えることは出来ない。すべての条からサンプルを採取する場合には層別抽出になる。すべての条のうちのいくつかの条をランダムに選んで,その選ばれた条からさらにサンプルをランダムに採取する,といった場合は二段抽出法になる。層別抽出はランダム抽出よりも精度が高まるが,二段抽出ではランダム抽出よりも精度が低下する。

## 仮想のイネ株調査
jo <- 10       ## 条数
jokabu <- 25   ## 条内株数
K <- jo*jokabu ## 総株数
N <- 20        ## 必要なサンプル数

## 単純無作為抽出法
random.s<- sort(sample(1:K, N, replace = FALSE))   ## replace=FALSEオプションは非復元抽出

## 書き出し
print("単純無作為抽出法による通し番号は")
paste(random.s, "番目")
print("単純無作為抽出法による並び場所は")
random.jo <- ceiling(random.s/jokabu);
random.pos<- random.s%% jokabu
apply(data.frame(random.jo, "条目の", random.pos, "株目"), 1, paste, collapse="")


## 層別抽出法(条の数よりサンプル数の方が少ない場合には二段抽出法)
ts.1 <- if(N>jo) 1:jo else sort(sample(1:jo, N, replace = FALSE))  ## 条を選ぶ
## 割り切れない場合を考慮して場内の株数を選ぶ
ts.2 <- if(N>jo) {
  sample(c(rep(floor(N/jo), jo-N%%jo),rep(ceiling(N/jo), N%%jo)), jo, replace = FALSE)
} else rep(1, N)
## 条ごとの無作為抽出
ts.s <- numeric(0)
for(i in 1:length(ts.1)) ts.s <- c(ts.s, sort(sample(1:jo, ts.2[i], replace = FALSE))+(ts.1[i]-1)*jokabu)

## 書き出し
print("層別抽出法による通し番号は")
paste(ts.s, "番目")
print("層別抽出法による並び場所は")
ts.jo <- ceiling(ts.s/jokabu);
ts.pos<- ts.s%% jokabu
apply(data.frame(ts.jo, "条目の", ts.pos, "株目"), 1, paste, collapse="")
## [1] "単純無作為抽出法による通し番号は"
##  [1] "12 番目"  "18 番目"  "42 番目"  "46 番目"  "50 番目"  "56 番目" 
##  [7] "57 番目"  "60 番目"  "85 番目"  "86 番目"  "141 番目" "144 番目"
## [13] "155 番目" "183 番目" "188 番目" "209 番目" "215 番目" "218 番目"
## [19] "226 番目" "232 番目"
## [1] "単純無作為抽出法による並び場所は"
##  [1] " 1条目の12株目" " 1条目の18株目" " 2条目の17株目" " 2条目の21株目"
##  [5] " 2条目の 0株目" " 3条目の 6株目" " 3条目の 7株目" " 3条目の10株目"
##  [9] " 4条目の10株目" " 4条目の11株目" " 6条目の16株目" " 6条目の19株目"
## [13] " 7条目の 5株目" " 8条目の 8株目" " 8条目の13株目" " 9条目の 9株目"
## [17] " 9条目の15株目" " 9条目の18株目" "10条目の 1株目" "10条目の 7株目"
## [1] "層別抽出法による通し番号は"
##  [1] "4 番目"   "9 番目"   "33 番目"  "35 番目"  "53 番目"  "56 番目" 
##  [7] "78 番目"  "79 番目"  "104 番目" "108 番目" "131 番目" "133 番目"
## [13] "154 番目" "156 番目" "181 番目" "183 番目" "201 番目" "204 番目"
## [19] "230 番目" "232 番目"
## [1] "層別抽出法による並び場所は"
##  [1] " 1条目の 4株目" " 1条目の 9株目" " 2条目の 8株目" " 2条目の10株目"
##  [5] " 3条目の 3株目" " 3条目の 6株目" " 4条目の 3株目" " 4条目の 4株目"
##  [9] " 5条目の 4株目" " 5条目の 8株目" " 6条目の 6株目" " 6条目の 8株目"
## [13] " 7条目の 4株目" " 7条目の 6株目" " 8条目の 6株目" " 8条目の 8株目"
## [17] " 9条目の 1株目" " 9条目の 4株目" "10条目の 5株目" "10条目の 7株目"

平均、標準誤差、信頼区間

基本的な統計量、標本平均(\(\bar{x}\))と不偏分散(母分散推定値)(\(s^2\))は、 \(\bar{x}=(∑_1^Nx_i)/n\),\(s^2=(∑_1^nx_i-\bar{x})/(n-1)\)によって与えられる。集団の平均値の\(\bar{x}\)がどれだけバラツクかの指標、標準誤差(SE: Standard Error)は\(\sqrt{∑_1^n(x_i-\bar{x})/n(n-1)}\)となるため、サンプル数が多いとき(20<n)は正規分布を仮定して\(\alpha\)精度の信頼区間を\(\bar{x}±Z(1-\alpha/2)×SE\)、サンプル数が少ないときは自由度n-1のt分布を使って\(\alpha\)精度の信頼区間が\(\bar{x}±t_{19}(1-\alpha/2)×SE\)で計算される。

## 仮想の20回サンプル調査(自分のデータに変更して後のコードを実行できる)
test.sample <-c(2,32,10,5,7,6,3,8,2,1,9,6,2,29,3,0,1,3,5,8);
prec <- 0.95  # 信頼区間の信頼精度 デフォルトの95%でとりあえず良い

## 平均、不偏分散、自由度20-1のt分布95%パーセンタイル(標準正規分布)
test.mean <- mean(test.sample)  # 平均値
test.var  <- var(test.sample)   # 不偏分散(母分散の推定値)
t.dist95  <- c(qt((1-prec)/2,df=length(test.sample)-1), qt(1-(1-prec)/2, df=length(test.sample)-1))  ## 小サンプルの場合t分布
prec.range<- round(test.mean+t.dist95*sqrt(test.var/length(test.sample)),digits=1)  ## 信頼区間

## 書き出し
paste("平均:", round(test.mean, digits=1), ",  不偏分散(母分散推定値):", round(test.var, digits=1), sep="")
paste("平均値の95%信頼区間は (", prec.range[1], ", ", prec.range[2], ")", sep="")
## [1] "平均:7.1,  不偏分散(母分散推定値):72.5"
## [1] "平均値の95%信頼区間は (3.1, 11.1)"

必要サンプル数

必要サンプル数は、集団の分散、許容できる被害の誤差が事前に設定できるときには、計算出来る。前項の例では、ニカメイガ二齢幼虫をイネ20株について調査したところ、平均7.1匹、不偏分散72.5であった。幼虫数が10匹を超えると防除が必要であるならば、許容できる被害の誤差は、\(10-7.1=2.9\)匹となるので必要サンプルサイズを計算できる。

delta <- 2.9  ## 許容誤差レベル(許容できる被害水準-とりあえずの平均値)
## 次回以降に必要なサンプルサイズは?
paste("許容できる誤差が", delta, "であるとき", sep="")
paste("次回以降に必要なサンプルサイズは:", round(((t.dist95[2]*sqrt(test.var)/delta)^2), digits=1), sep="")
## [1] "許容できる誤差が2.9であるとき"
## [1] "次回以降に必要なサンプルサイズは:37.8"